<?php
require_once("config.db.php");
class mysql_db{
    //数据库配置
    private $dbconf;
    //数据库联接
    private $dbconn;

    /*
        函数名称：mysql_db();
        函数功能：填入数据库配置。
        函数简介：mysql_db($dbconfig);
        array(
            'server' => "localhost"; //MySql服务器地址
            'user' => "root"; //MySql用户名
            'password' => ""; //MySql用户密码
            'database' => "cindypro"; //数据库名称
            'charset' => "utf8"; //MySql字符集
    */
    function mysql_db(){
         global $db_config;
        //判断sql类型并保存
        if(is_array($db_config)){
            $this->dbconf = $db_config;
        }
    }

    /*
        函数名称: connect();
        函数功能: 连接Mysql，确定字符集编码。
        函数简介: connect()
        返回数值: 无
    */
    function connect(){
        //如果已经连接便退出
        if($this->dbconn){
            return true;
        }
        //得到相关数据
        $server = $this->dbconf['server'];
        $user = $this->dbconf['user'];
        $password = $this->dbconf['password'];
        $database = $this->dbconf['database'];
        $charset = $this->dbconf['charset'];
        //连接Mysql服务器
        $this->dbconn = mysql_connect($server, $user, $password);
        mysql_query("SET NAMES UTF-8");
        //判断连接和是否有字符集编码，发送连接校对和字符集编码
        if($this->dbconn && isset($charset)){
            mysql_query("SET character_set_connection=".$charset.", character_set_results=".$charset.", character_set_client=binary", $this->dbconn);
        }
        //判断连接，连接数据库
        if($this->dbconn && mysql_select_db($database, $this->dbconn)){
            return true;
        }else{
            return false;
        }
    }
    /*
        函数名称: query();
        函数功能: 运行Mysql语句。
        函数简介: query( string sql );
        sql : 任何sql语句。
        返回数值:
        >-1 : 受影响的总数。
        -1 : 语句运行失败。
    */
    function query($sql){
        //数据库连接
        $this->connect();
        //判断并运行mysql_query()
        if($this->result = mysql_query($sql, $this->dbconn)){
            return mysql_affected_rows();
        }else{
            return -1;
        }
    }
    /*
        函数名称: data();
        函数功能: 返回所有记录。
        函数简介: data( string sql );
        sql : sql查询语句。
        返回数值: 包含总数和数据的数组
        ['total'] : 记录总数，=-1时为运行失败；>-1时为查询出来的条数。
        ['data'] : 结果数据，运行失败时为空。
    */
    function data($sql){
        //数据库连接
        $this->connect();
        //判断是否为查询语句，判断并运行mysql_query()，得到总数和数据
        if(strtoupper(substr($sql, 0, 6)) != "SELECT" || $result = @mysql_query($sql, $this->dbconn)){
            //得到总数
            $total = @mysql_num_rows($result);
            $ret = array();
            //遍历并组织数据
            while($row = @mysql_fetch_array($result, MYSQL_ASSOC)){
                array_push($ret, $row);
            }
            @mysql_free_result($result);
            return array('total'=>$total,'data'=>$ret);
        }else{
            return array('total'=>-1);
        }
    }
    /*
            函数名称: findAll();
            函数功能: 返回所有记录。
            函数简介: data( string sql );
            sql : sql查询语句。
            返回数值: 包含总数和数据的数组
            ['total'] : 记录总数，=-1时为运行失败；>-1时为查询出来的条数。
            ['data'] : 结果数据，运行失败时为空。
        */
    public function findAll($tableName) {
         $sql = "SELECT * FROM ".$tableName;
         $this->data($sql);
     }
     /*
                 函数名称: findSomeone();
                 函数功能: 返回所查记录。
                 函数简介: data( string sql );
                 sql : sql查询语句。
                 返回数值: 包含总数和数据的数组
                 ['total'] : 记录总数，=-1时为运行失败；>-1时为查询出来的条数。
                 ['data'] : 结果数据，运行失败时为空。
     */
         public function findSomeone($tableName,$coleName,$vale) {
              $sql = "SELECT * FROM ".$tableName." where ".$coleName." = ".$vale;
              $this->data($sql);
          }

    /*
        函数名称: total();
        函数功能: 求出记录总数。
        函数简介: total( string sql );
        sql : sql查询语句。
        返回数值:
        -1 : 语句运行失败。
        >-1 : 返回的结果数。
    */
    function total($sql){
        //数据库连接
        $this->connect();
        //判断是否为查询语句，判断并运行mysql_query()，得到总数
        /*if(strtoupper(substr(trim($sql), 0, 6)) != "SELECT" || $result = @mysql_query($sql, $this->dbconn)){
            return $this->jsonModule("user exit",mysql_num_rows($result));
        }else{
         return $this->jsonModule("not find",-1);
        }*/
        $result = @mysql_query($sql, $this->dbconn);
        return  $result;
    }
    /*
        函数名称: page();
        函数功能: 分页返回数据以及分页信息。
        函数简介: page( string sql [, number page [, number pagesize [, number pagenum]]] );
        sql : sql查询语句，不要带limit。
        page : 当前要显示的页面，非必填，默认值为0。
        pagesize : 每页要显示的数据条数，非必填，默认值为20。
        pagenum : 每页显示的页码数量，非必填，默认值为10。
        返回数值: 返回的为包含记录总数，当前页面所有数据，当前页面页码，当前页面页码的最小值和最大值，总页数。
        ['total'] : 记录总数，=-1时为运行失败；>-1时为查询出来的条数。
        ['data'] : 结果数据，运行失败时为空。
        ['page'] : 当前页面页码，运行失败时为1。
        ['pagemin'] : 当前页面页码最小值，运行失败时为0。
        ['pagemax'] : 当前页面页码最大值，运行失败时为0。
        ['pagetotal'] : 总页数，运行失败时为0。
    */
    function page($sql, $page=1, $pagesize=20, $pagenum=10){
        //数据库连接
        $this->connect();
        //判断是否为查询语句，判断并运行mysql_query()，开始分页程序
        if(strtoupper(substr(trim($sql), 0, 6)) == "SELECT" && $result = @mysql_query($sql,$this->dbconn)){
            //的到总数
            $total = @mysql_num_rows($result);
            //得到总页数
            $pagetotal = ($total%$pagesize != 0) ? intval($total/$pagesize)+1 : intval($total/$pagesize);
            //判断当前页码的正确性，并纠正
            if($page > $pagetotal) $page = $pagetotal;
            if($page < 1) $page = 1;
            //得到最小页码和最大页码
            $pagemin = ($page-intval($pagenum/2) < 1) ? 1 : $page-intval($pagenum/2);
            $pagemax = $pagemin+$pagenum;
            if($pagemax > $pagetotal) $pagemax = $pagetotal;
            $pagemin = $pagemax-$pagenum;
            if($pagemin < 1) $pagemin = 1;
            //得到数据开始的条数
            $datastart = ($page-1)*$pagesize;
            //拼接新的sql语句
            $sql .= " LIMIT ".$datastart." , ".$pagesize;
            //判断并运行mysql_query()，得到数据
            if($result = @mysql_query($sql,$this->dbconn)){
                $ret = array();
                while($row = @mysql_fetch_array($result, MYSQL_ASSOC))
                    array_push($ret, $row);
                @mysql_free_result($result);
                $data = array('pagenum'=>$pagenum, 'total'=>$total, 'data'=>$ret, 'page'=>$page, 'pagemin'=>$pagemin, 'pagemax'=>$pagemax, 'pagetotal'=>$pagetotal);
            }else{
                $data = array('pagenum'=>$pagenum,'total'=>-1,'data'=>'', 'page'=>0, 'pagemin'=>0, 'pagemax'=>0, 'pagetotal'=>0);
            }
        }else{
            $data = array('pagenum'=>$pagenum,'total'=>-1, 'data'=>'', 'page'=>0, 'pagemin'=>0, 'pagemax'=>0, 'pagetotal'=>0);
        }
        return $data;
    }
    /*
        函数名称: close();
        函数功能: 关闭连接。
        函数简介: close();
        返回数值: 无。
    */
    function close(){
        if($this->result) @mysql_free_result($this->result);
        if($this->dbconn) @mysql_close($this->dbconn);
    }
     /*
            函数名称: jsonModule();
            函数功能: 设置JSON格式。
            返回数值: JSON
        */
    function jsonModule($msg,$data){
        $json_module["message"]=$msg;
        $json_module["type"]="json";
        $json_module["data"]=$data;
        return json_encode($json_module);}

    /*
            函数名称:createJson($isSuccess,$data),$re是$db->page的返回结果
            函数功能:显示出分页的页码
            函数简介:showpage()
            返回值:无
    */
    function createJson($isSuccess,$data,$message){
           $success=$isSuccess?"success":"error";
           $vlData= $isSuccess?$data:"";
           $mess=$message?$message:"";
           $jsonTxt="{\"status\":\"".$success."\",\"message\":\"".$mess."\",\"data\":\"".$vlData."\"}";
           $jsonTxt=str_replace("\"[","[",$jsonTxt);
           $jsonTxt=str_replace("]\"","]",$jsonTxt);
           $jsonTxt=str_replace("\"{","{",$jsonTxt);
           $jsonTxt=str_replace("}\"","}",$jsonTxt);
           return  $jsonTxt;
    }
}

/*
    函数名称:showpage($re),$re是$db->page的返回结果
    函数功能:显示出分页的页码
    函数简介:showpage()
    返回值:无
*/
function showpage($re){
    echo "<br /><span class='pages'>pages:</span> ";

    $p = $re["page"];//当前页
    $pages = $re["pagetotal"];//总页数
    $step = $re["pagenum"];//步长
    $low = 1;//下界
    $high = 1;//上界
    $low = floor((($p - 1)/$step)) * $step + 1;//求下界
    $high = $low + $step - 1;//求上界
    if($high >= $pages)$high = $pages;
    if($p != 1)
    {
        echo " <a class='pagelist' href='?page=1'>?First</a> ";
        echo "<a class='pagelist' href='?page=".($p-1)."'>? Previous</a> ";
    }
    if($low > 1) echo "...";
    for($i=$low;$i<=$high;$i++)
    {
        echo "<a class='pagelist' href='?page=".$i."'>";
        if($i == $p)
            echo "<font color='black'><b>";
        echo $i;
        if($i == $p)
            echo "</b></font>";
        echo "</a> ";
        if(($high < $pages) && $i==$high) echo "...";
    }
    if($p != $pages)//
    {
        echo " <a class='pagelist' href='?page=".($p+1)."'>Next ?</a> ";
        echo "<a class='pagelist' href='?page=".$pages."'>Last?</a>";
    }
    echo "<br />";

}


?>